home *** CD-ROM | disk | FTP | other *** search
/ CD Exchange / CD Exchange - Volume 1.iso / education / gravity-well / gw-vectors.c < prev    next >
C/C++ Source or Header  |  1989-09-24  |  2KB  |  102 lines

  1. /*
  2.       GW-Vectors.c
  3.       Vector arithmetic for Gravity-Well
  4.       Gary Teachout
  5.       Copyright   July 1989
  6.       lc -x GW-Vectors     To compile with Lattice 5.0
  7. */
  8.  
  9.  
  10.  #include "GW-Include.h"
  11.  
  12.  
  13.  void rotatedv( v , pv , s , c )
  14.    struct dv *v , *pv  ;
  15.    double *s , *c  ;
  16.  {
  17.    struct dv    t1 , t2  ;
  18.  
  19.    scaledv( v , c , &t1 )  ;
  20.    scaledv( pv , s , &t2 )  ;
  21.    adddv( &t1 , &t2 , v )  ;
  22.  }
  23.  
  24.  
  25.  void rotatedvpair10( x , y )    /* rotate vector pair 10 degrees */
  26.    struct dv   *x , *y  ;
  27.  {
  28.    static double  srotate = 0.1736481776669303311 ,/* the sine and cosine */
  29.                   crotate = 0.9848077530122081313 ,/* of 10 degrees       */
  30.                   m1 = -1.0  ;
  31.    struct dv   t1  ;
  32.  
  33.    scaledv( x , &m1 , &t1 )  ;
  34.    rotatedv( x , y , &srotate , &crotate )  ;
  35.    rotatedv( y , &t1 , &srotate , &crotate )  ;
  36.  }
  37.  
  38.  
  39.  void adddv( a , b , out )
  40.    struct dv *a , *b , *out  ;
  41.  {
  42.    out->x = a->x + b->x  ;
  43.    out->y = a->y + b->y  ;
  44.    out->z = a->z + b->z  ;
  45.  }
  46.  
  47.  
  48.  void subdv( a , b , out )
  49.    struct dv *a , *b , *out  ;
  50.  {
  51.    out->x = a->x - b->x  ;
  52.    out->y = a->y - b->y  ;
  53.    out->z = a->z - b->z  ;
  54.  }
  55.  
  56.  
  57.  void scaledv( a , b , out )
  58.    struct dv *a , *out  ;
  59.    double *b  ;
  60.  {
  61.    out->x = a->x * *b  ;
  62.    out->y = a->y * *b  ;
  63.    out->z = a->z * *b  ;
  64.  }
  65.  
  66.  
  67.  void dotdv( a , b , out )
  68.    struct dv *a , *b  ;
  69.    double *out  ;
  70.  {
  71.    *out =  a->x * b->x  +  a->y * b->y  +  a->z * b->z  ;
  72.  }
  73.  
  74. /****    Gravity-Well does not use cross products
  75.  void crossdv( a , b , out )     **     output must not go to input    **
  76.    struct dv *a , *b , *out  ;
  77.  {
  78.    out->x =  a->y * b->z  -  a->z * b->y  ;
  79.    out->y =  a->z * b->x  -  a->x * b->z  ;
  80.    out->z =  a->x * b->y  -  a->y * b->x  ;
  81.  }
  82. ****/
  83.  
  84.  void magdv( a , out )
  85.    struct dv *a  ;
  86.    double *out  ;
  87.  {
  88.    *out = sqrt( a->x * a->x  +  a->y * a->y  +  a->z * a->z )  ;
  89.  }
  90.  
  91.  
  92.  void basis( a , b , out )   /*     output must not go to input    */
  93.    struct dv *a , *out  ;
  94.    struct obv *b  ;
  95.  {
  96.    dotdv( a , &b->i , &out->x )  ;
  97.    dotdv( a , &b->j , &out->y )  ;
  98.    dotdv( a , &b->k , &out->z )  ;
  99.  }
  100.  
  101.  
  102.